#include "../HttpServer.hpp"

// size_t Spliter(const std::string &src, const std::string &sep,
//                std::vector<std::string> *arr)
// {
//     size_t offset = 0;
//     while (offset < src.size())
//     {
//         size_t pos = src.find(sep, offset);
//         if (pos == std::string::npos)
//         {
//             if (pos == src.size())
//             {
//                 break;
//             }
//             arr->push_back(src.substr(offset));
//             return arr->size();
//         }
//         if (pos == offset)
//         {
//             offset += sep.size();
//             continue;
//         }
//         arr->push_back(src.substr(offset, pos - offset));
//         offset = pos + sep.size();
//     }
//     return arr->size();
// }

// int main()
// {
//     std::string src = "abc, def, llfl, , dasd, , ";
//     std::string sep = ", ";
//     std::vector<std::string> buf;
//     int n = Spliter(src, sep, &buf);
//     std::cout << "string count: " << n << std::endl;
//     for (int i = 0; i < n; ++i)
//     {
//         std::cout << '[' << buf[i] << ']' << std::endl;
//     }
//     return 0;
// }

// 读取文件内容，将读取的内容放到一个Buffer中
bool ReadFile(const std::string &filename, std::string *buf)
{
    std::ifstream ifile(filename, std::ios::binary);
    if (!ifile.is_open())
    {
        std::cout << filename << " OPEN FAILED!" << std::endl;
        return false;
    }
    ifile.seekg(0, ifile.end);
    size_t fsize = ifile.tellg();
    ifile.seekg(0, ifile.beg);
    buf->resize(fsize);
    ifile.read(&(*buf)[0], fsize);
    if (!ifile.good())
    {
        std::cout << filename << " READ FAILED!" << std::endl;
        ifile.close();
        return false;
    }
    ifile.close();
    return true;
}

// 向文件写入内容
bool WriteFile(const std::string &filename, std::string &buf)
{
    std::ofstream ofile(filename, std::ios::binary | std::ios::trunc);
    if (!ofile.is_open())
    {
        std::cout << filename << " OPEN FAILED!" << std::endl;
        return false;
    }
    ofile.write(buf.c_str(), buf.size());
    if (!ofile.good())
    {
        std::cout << filename << " WRITE FAILED!" << std::endl;
        ofile.close();
        return false;
    }
    ofile.close();
    return true;
}

int main()
{
    // std::string buf;
    // ReadFile("./output.txt", &buf);
    // std::cout << buf << std::endl;
    // WriteFile("test.txt", buf);
    // std::string url = "login?user=lyh&passward=a  ";
    // std::cout << url << std::endl;
    // std::string res = Util::URLEncode(url, true);
    // std::cout << res << std::endl;
    // std::string tmp = Util::URLDecode(url, true);
    // std::cout << tmp << std::endl;
    // std::cout << Util::IsDirectory("123") << std::endl;
    // std::cout << Util::IsRegular("123") << std::endl;
    // std::cout << Util::IsDirectory("456") << std::endl;
    // std::cout << Util::IsRegular("456") << std::endl;
    std::string path = "/dir/../../server/index.html";
    std::cout << Util::IsValidPath(path) << std::endl;
    return 0;
}